In graphic presentation systems, a large amount of data must be presented to a video screen in a short amount of time. This problem is compounded in that this information is constantly moving, and must be manipulated in real-time so as not to affect the visual sense of the viewer. An appreciation of the problem arises from an understanding that each line of a video screen has typically 1280 pixels or points per line, and 1024 lines, each pixel having, perhaps, 8 bits of data associated therewith.
It is easy to understand then that to move an image, or to rotate the image to create 3-D graphics, or to perform any other of a number of functions, a very large number of mathematical calculations must be made for every instant of time for every pixel on the screen. This is not only burdensome to a processor, but potentially could cause a graphics processor to have severe limitations on its ability to perform properly.
Co-processors, on the other hand, have long been known in the art to perform mathematical operations separate from the main processor. These coprocessors typically operate as an adjunct to a host computer by accepting from the host a set of operands and an instruction as to the operation to be performed on the operands. When this operation is accomplished, the result is returned to the host for utilization. For a series of calculations, the host passes a series of operands to the coprocessor for manipulation. However, if this were to be attempted for graphics presentation, the number of communications between the main or host processor and the coprocessor would be significant at best and, given the complex matrix additions and multiplications necessary, each with many substeps, a limit of operation would soon be reached.
Thus, there is needed in the art an arrangement for allowing complicated mathematics to be performed at the direction of a host processor, but without burdening the data transfer capability between the host and the coprocessor.
Several other problems arise out of the fact that these mathematic operations must be performed in a very small amount of time. These problems relate to the movement of data back and forth from register to register and from place to place for each type of calculation. Such movement, if performed at all, must be accomplished in a minimum amount of time and with minimum disruption to the processor and to other active memories. Some of these functions which must be performed are matrix mathematics, vector instructions and manipulation, image processing and graphics manipulations. Along with these basic functions there are a host of other calculations and manipulations that must be performed on the data bits if the graphics system is to be accepted by demanding users.
One important attribute of graphics is the need for accuracy, especially when large numbers are manipulated many times. Systems that use only integers in order to save time or processing capacity or systems that round-off numbers to one or two decimal places ultimately have limitations on their use.
To compose a matrix requires a series of multiplications and additions. For example, to compose a 4.times.4 matrix from two 4.times.4 matrices involves 64 multiplies and 48 adds. And so, in a coprocessor environment, it becomes very important to be able to do those multiplies and adds very quickly.
Thus, there is a further need in the art for a graphic processing system arranged to perform a continuing stream of highly complex mathematical calculations in a very short interval of time and to do so with a minimum of data transfer and interference from external processors and with a limited number of internal registers.
There is a further need in the art to accomplish complex graphical mathematics in a precise manner allowing for full floating point accuracy.